home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 422_02 / misc / windemo.c < prev   
C/C++ Source or Header  |  1994-03-20  |  12KB  |  480 lines

  1. /*
  2.  * Program to demonstrate the MICRO-C/PC WINDOWING library.
  3.  *
  4.  * Copyright 1989-1994 Dave Dunfield
  5.  * All rights reserved.
  6.  *
  7.  * Permission granted for personal (non-commercial) use only.
  8.  *
  9.  * Compile command: cc windemo -fop
  10.  */
  11. #include <stdio.h>        /* Standard I/O definitions */
  12. #include <window.h>        /* Window   I/O definitions */
  13.  
  14. /* Color index's for different window types */
  15. #define    MENU    0
  16. #define    FORM    1
  17. #define    TEXT    2
  18. #define    PAUSE    3
  19.  
  20. /* Pointer to active color selections, and default values */
  21. unsigned *color,
  22.     m_colors[] = { 0x70, 0x07, 0x70, 0x07 },    /* Monochrome defaults */
  23.     c_colors[] = { 0x21, 0x17, 0x67, 0x42 };    /* Color defaults */
  24.  
  25. /* Pointer for access to title window */
  26. struct WINDOW *titlewin;
  27.  
  28. /* Introductory pre-ramble */
  29. char *intro[] = {
  30.     "",
  31.     "   This program demonstrates some of the capabilities of the MICRO-C",
  32.     "PC windowing libary. This package allows you to produce nice looking",
  33.     "DOS applications with little effort. When coupled with MICRO-C's TSR",
  34.     "function, even TSR's become simple to write... The windowing library",
  35.     "automatically saves and restores the interrupted programs video.",
  36.     "",
  37.     "   If you order the MICRO-C compiler package,  which includes complete",
  38.     "source code for the compiler,  libraries and utilities,  you will also",
  39.     "receive source code and documentation for a large selection of  useful",
  40.     "MICRO-C library functions and utility programs (Over 1 Meg total). The",
  41.     "source for the windowing library is part of that collection.",
  42.     "",
  43.     "See the included CATALOG file for ordering information.",
  44.     "",
  45.     "Enjoy MICRO-C...",
  46.     "",
  47.     "   Dave Dunfield",
  48.     "",
  49.     "Press any key to proceed...",
  50.     0 };
  51.  
  52. /* Main selection menu */
  53. char *main_menu[] = {
  54.     "Library functions",
  55.     "Window creation",
  56.     "Window scrolling",
  57.     "Concurrent windows",
  58.     "Form entry",
  59.     "OPEN attributes",
  60.     "Set window colors",
  61.     "Clear main window",
  62.     0 };
  63.  
  64. /* Colors selection menu */
  65. char *menu1[] = {
  66.     "Menu window colors",
  67.     "Form window colors",
  68.     "Text window colors",
  69.     "Pause window colors",
  70.     0 };
  71.  
  72. /* Available colors */
  73. char *menu2[] = {
  74.     "Black",
  75.     "Blue",
  76.     "Green",
  77.     "Cyan",
  78.     "Red",
  79.     "Magenta",
  80.     "Brown",
  81.     "White",
  82.     0 };
  83.  
  84. /* Sample input form */
  85. char *form[] = {
  86.     50<<8|6,
  87.     "\x01\x00\x20Software  :",
  88.     "\x01\x01\x20Author    :",
  89.     "\x01\x02\x20Directory :",
  90.     "\x01\x03\x20Filename  :",
  91.     0 };
  92.  
  93. /* Data areas for input form */
  94. char software[0x21]    = "MICRO-C",
  95.     author[0x21]    = "Dave Dunfield",
  96.     directory[0x21]    = "C:\\MC",
  97.     filename[0x21]    = "MC*.*";
  98.  
  99. /* Help text for form entry window */
  100. char *ftext[] = {
  101.     "Use ARROW keys to move around form",
  102.     "HOME/END moves to START/END of line",
  103.     "PgUp clears entire line, PgDn clears to end",
  104.     "INSERT toggles insert ON/OFF (Observe cursor)",
  105.     "DELETE deletes the character under cursor",
  106.     "BACKSPACE deletes character preceeding cursor",
  107.     "Press ESCAPE to return to the main menu",
  108.     0 }
  109.     
  110. /* Window attribute bits & corresponding defaults */
  111. char *atext[] = {
  112.     "SAVE/RESTORE screen under window",
  113.     "Enable SINGLE LINE border",
  114.     "Enable DOUBLE LINE border",
  115.     "CLEAR window on entry",
  116.     "CLEAR window on exit",
  117.     "NEWLINE(0x0A) = LF only",
  118.     "Enable SCROLLING",
  119.     "Enable LINE-WRAP" };
  120. char wattrs[8] = { 1, 1, 0, 1, 0, 0, 1, 1 };
  121.  
  122. /* Help text for attribute checkout window */
  123. char *awtext[] = {
  124.     "Use ARROW keys to move around",
  125.     "HOME = Clear entire window",
  126.     "PgUp = Clear to end of window",
  127.     "PgDn = Clear to end of line",
  128.     "ENTER = Newline character",
  129.     "ESCAPE = Return to previous menu",
  130.     0 };
  131.  
  132. /* Rambling about basic window functions (screen 1) */
  133. char *basic1[] = {        /* Screen 1 */
  134.     "",
  135.     "The basic window functions (written in assembler) are:",
  136.     "",
  137.     "   wopen        - Open a new window",
  138.     "   wclose       - Close active window",
  139.     "   wputc        - Write character to active window",
  140.     "   wclwin       - Clear active window",
  141.     "   wcleow       - Clear to end of active window",
  142.     "   wcleol       - Clear to end of line in active window",
  143.     "   w_close      - Close any window",
  144.     "   w_putc       - Write character to any window",
  145.     "   w_clwin      - Clear any window",
  146.     "   w_cleow      - Clear to end of any window",
  147.     "   w_cleol      - Clear to end of line in any window",
  148.     "",
  149.     "Press any key to proceed...",
  150.     0 };
  151.  
  152. char *basic2[] = {        /* Screen 2 */
  153.     "",
  154.     "More basic functions:",
  155.     "",
  156.     "   wgotoxy      - Position cursor in active window",
  157.     "   wupdatexy    - Update cursor position in current window",
  158.     "   wgetc        - Get character with cursor in active window",
  159.     "   wtstc        - Test for character with cursor in active window",
  160.     "   w_gotoxy     - Position cursor in any window",
  161.     "   w_updatexy   - Update cursor position in any window",
  162.     "   w_getc       - Get character with cursor in any window",
  163.     "   w_tstc       - Test for character with cursor in any window",
  164.     "   wcursor_off  - Turn cursor off *",
  165.     "   wcursor_line - Turn cursor on as a line *",
  166.     "   wcursor_block- Turn cursor on as a block *",
  167.     "",
  168.     "* The cursor is saved/restored when windows are opened/closed",
  169.     "",
  170.     "Press any key to proceed...",
  171.     0 };
  172.  
  173. /* Rambling about supplementary video functions */
  174. char *supp1[] = {
  175.     "",
  176.     "The supplementary video functions (written in 'C' are):",
  177.     "",
  178.     "   wputs        - Write a string to active window",
  179.     "   wputf        - Write a string in a field to active window",
  180.     "   wprintf      - Perform 'printf' to active window",
  181.     "   wgets        - Get a string (with editing) in active window",
  182.     "   wmenu        - Perform a multiple selection menu in window",
  183.     "   wform        - Display/update an input form in window",
  184.     "   w_puts       - Write a string to any window",
  185.     "   w_printf     - Perform 'printf' to any window",
  186.     "",
  187.     "Press any key to proceed...",
  188.     0 };
  189.  
  190. /*
  191.  * Main function, present main menu & execute sub-functions
  192.  */
  193. main()
  194. {
  195.     int m1;
  196.  
  197.     m1 = 0;
  198.  
  199.     titlewin = wopen(0, 0, 80, 3, WBOX2|WCOPEN|0x47);
  200.     color = (W_BASE == 0xB000) ? m_colors : c_colors;
  201.     wopen(0,3,80,22,WSAVE|WBOX1|WCOPEN|0x30);
  202.     wcursor_off();
  203.     title("MICRO-C Windowing Demonstration");
  204.     help(intro);
  205.     wgetc();
  206.     wclwin();
  207.     for(;;) {
  208.         title("MICRO-C Window Library Demonstration - ESC to exit");
  209.         if(wmenu(12, 5, WBOX1|WCOPEN|color[MENU], main_menu, &m1))
  210.             break;
  211.         switch(m1) {
  212.             case 0 :        /* Library function info */
  213.                 help(basic1);
  214.                 wgetc();
  215.                 help(basic2);
  216.                 wgetc();
  217.                 help(supp1);
  218.                 wgetc();
  219.                 break;
  220.             case 1 :        /* Window creation demo */
  221.                 create_demo();
  222.                 break;
  223.             case 2 :        /* Scrolling window demo */
  224.                 scroll_demo();
  225.                 break;
  226.             case 3 :        /* Concurrent window demo */
  227.                 simul_demo();
  228.                 break;
  229.             case 4 :        /* Form entry demo */
  230.                 form_demo();
  231.                 break;
  232.             case 5 :        /* Window attribute demo */
  233.                 attr_demo();
  234.                 break;
  235.             case 6 :        /* Set window colors */
  236.                 set_colors();
  237.                 break;
  238.             case 7 :        /* Clear main window */
  239.                 wclwin();
  240.                 break; } }
  241.     title("Demonstration Complete");
  242.     wclose();
  243.     wclose();
  244. }
  245.  
  246. /*
  247.  * Draw a title on the title window
  248.  */
  249. title(string)
  250.     char *string;
  251. {
  252.     w_clwin(titlewin);
  253.     w_gotoxy((78/2) - (strlen(string)/2), 0, titlewin);
  254.     w_puts(string, titlewin);
  255. }
  256.  
  257. /*
  258.  * Pause for a key to be pressed
  259.  */
  260. pause()
  261. {
  262.     wopen(22, 12, 37, 5, WSAVE|WBOX2|WCOPEN|color[PAUSE]);
  263.     wcursor_off();
  264.     wgotoxy(5, 1);
  265.     wputs("Press any key to proceed...");
  266.     wgetc();
  267.     wclose();
  268. }
  269.  
  270. /*
  271.  * Display help text on the screen
  272.  */
  273. help(text)
  274.     char *text[];
  275. {
  276.     int i;
  277.     char *ptr;
  278.  
  279.     wclwin();
  280.     i = 0;
  281.     while(ptr = text[i]) {
  282.         wgotoxy(0, i++);
  283.         wputs(ptr); }
  284. }
  285.  
  286. /*
  287.  * Set the window colors
  288.  */
  289. set_colors()
  290. {
  291.     int c, f, b;
  292.     char buffer[50];
  293.  
  294.     c = 0;
  295.     wopen(15, 9, 50, 11, WSAVE|WBOX1|WCOPEN|color[TEXT]);
  296.     wcursor_off();
  297.     wputs("Use PgUp and PgDn to select window\n\n");
  298.     wputs("Up and Down arrows to select FOREGROUND color\n");
  299.     wputs("Left and Right arrows to select BACKGROUND color\n");
  300.     wputs("Press ESCAPE to exit this function");
  301.     for(;;) {
  302.         sprintf(buffer, "COLOR selection menu: %s", menu1[c]);
  303.         title(buffer);
  304.         b = color[c] >> 4;
  305.         f